home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / lib / pmake / biglibtop.mk < prev    next >
Text File  |  1991-07-20  |  9KB  |  354 lines

  1. #
  2. # This is a library Makefile that is included by the Makefiles for
  3. # the top-level directories of multi-directory libraries ("biglib"s).
  4. # For most targets, this file just passes the targets on to each of
  5. # the subdirectories.  The file that includes this one should already
  6. # have defined the following variables:
  7. #    INSTALLDIR    generic place to install archive (we'll add a .md
  8. #            subdirectory specifier here)
  9. #    LINTDIR        place to install lint library (we'll add a .mach
  10. #            extension here)
  11. #    NAME        base name of library (e.g. tcl, sx, c, etc.)
  12. #    SUBDIRS        subdirectories that contain "interesting" things
  13. #            (e.g., individual commands, modules of the kernel,
  14. #            of sub-portions of a large library).
  15. #    TM        target machine type for object files etc.
  16. #    TYPE        a keyword identifying which sort of command this
  17. #            is;  used to determine where to install, etc.
  18. #
  19. # A bunch of variables are passed on to lower-level makes, if they are
  20. # defined;  see the definitions immediately below for a complete list.
  21. #    
  22. # $Header: /sprite/lib/pmake/RCS/biglibtop.mk,v 1.26 90/11/02 08:43:08 mendel Exp $
  23. #
  24.  
  25. #
  26. # Set up search paths.
  27. #
  28. .PATH.a        : # Clear out;  otherwise Pmake uses the installed libraries
  29.           # where it should be using uninstalled ones.
  30.  
  31. #
  32. # System programs -- assign conditionally so they may be redefined in
  33. # including makefile
  34. #
  35. BINDIR        ?= /sprite/cmds.$(MACHINE)
  36.  
  37. CAT        ?= $(BINDIR)/cat
  38. CP        ?= $(BINDIR)/cp
  39. MV        ?= $(BINDIR)/mv
  40. RANLIB        ?= $(BINDIR)/ranlib
  41. RM        ?= $(BINDIR)/rm
  42. TEST            ?= $(BINDIR)/test
  43. UPDATE        ?= $(BINDIR)/update
  44.  
  45. #
  46. # Several variables (such as where to install) are set based on the
  47. # TYPE variable.  Of course, any of these variables can be overridden
  48. # by explicit assignments.
  49. #
  50. TYPE        ?= unknown
  51. #if !empty(TYPE:Msprite)
  52. INSTALLDIR    ?= /sprite/lib
  53. INSTALLMAN    ?= /sprite/man/lib/$(NAME)
  54. LINTDIR        ?= /sprite/lib/lint
  55. #elif !empty(TYPE:Mx)
  56. INSTALLDIR    ?= /X/lib
  57. INSTALLMAN    ?= /X/man/lib/$(NAME)
  58. LINTDIR        ?= /X/lib/lint
  59. #elif !empty(TYPE:MX11R4)
  60. INSTALLDIR    ?= /X11/R4/lib
  61. INSTALLMAN    ?= /X11/R4/man/lib/$(NAME)
  62. LINTDIR        ?= /X11/R4/lib/lint
  63. #else
  64. INSTALLDIR    ?=
  65. INSTALLMAN    ?=
  66. LINTDIR        ?=
  67. #endif
  68.  
  69. #
  70. # Figure out what stuff we'll pass to sub-makes.
  71. #
  72. PASSVARS    =
  73. #if        defined(CC) && empty(CC:Mcc)
  74. PASSVARS    += 'CC=$(CC)'
  75. #endif
  76. #ifdef        XCFLAGS
  77. PASSVARS    += 'XCFLAGS=$(XCFLAGS)'
  78. #endif
  79. #ifdef        XAFLAGS
  80. PASSVARS    += 'XAFLAGS=$(XAFLAGS)'
  81. #endif
  82. #ifdef        INCLUDEDIR
  83. PASSVARS    += 'INCLUDEDIR=$(INCLUDEDIR)'
  84. #endif
  85. #ifdef        INSTALLDIR
  86. PASSVARS    += 'INSTALLDIR=$(INSTALLDIR)'
  87. #endif
  88. #ifdef        NOBACKUP
  89. PASSVARS    += 'NOBACKUP=$(NOBACKUP)'
  90. #endif
  91. #ifdef        BACKUPAGE
  92. PASSVARS    += 'BACKUPAGE=$(BACKUPAGE)'
  93. #endif
  94. #ifdef        TM
  95. PASSVARS    += 'TM=$(TM)'
  96. #endif
  97.  
  98. #
  99. # The following include is so that RANLIB can get re-set depending
  100. # on the machine type.
  101. #
  102. #include    <tm.mk>
  103. INSTALLFLAGS    ?=
  104. INSTALLMANFLAGS    ?=
  105.  
  106. # MAKESUBDIRS usage:
  107. #    <target> : MAKESUBDIRS
  108. #
  109. # This .USE target will simply pass <target> onto each subdirectory
  110. # in a separate make.If the TM variable is defined, then only pass
  111. # the target on to subdirectories whose Makefiles include the given
  112. # TM among their MACHINES.
  113. #
  114. MAKESUBDIRS    : .USE .MAKE .EXEC .SILENT .NOEXPORT
  115.     for i in $(SUBDIRS);
  116.     do
  117. #ifdef TM
  118.         if grep '^MACHINES' $i/Makefile | grep -s $(TM); then
  119.             true;
  120.         else continue;
  121.         fi
  122. #endif TM
  123.         echo %%% ${i} %%%
  124.         (cd $i; $(MAKE) $(PASSVARS) $(.TARGET))
  125.     done
  126.  
  127. #
  128. # MAKEINSTALLLIB usage:
  129. #    <target> : <source> MAKEINSTALLLIB
  130. # Will copy over a library and re-ranlib it.
  131. #
  132. MAKEINSTALLLIB : .USE
  133.     $(RM) -f $(.TARGET).old $(.TARGET).new~
  134.     $(CP) $(.ALLSRC) $(.TARGET).new~
  135.     $(RANLIB) $(.TARGET).new~
  136.     - $(MV) $(.TARGET) $(.TARGET).old
  137.     $(MV) $(.TARGET).new~ $(.TARGET)
  138.  
  139. REGLIB            = $(TM).md/lib$(NAME).a
  140. PROFLIB            = $(TM).md/lib$(NAME)_p.a
  141. DEBUGLIB        = $(TM).md/lib$(NAME)_g.a
  142. LINTLIB            = $(TM).md/llib-l$(NAME).ln
  143. INSTLIB            = $(INSTALLDIR)/$(REGLIB)
  144. INSTPROFILE        = $(INSTALLDIR)/$(PROFLIB)
  145. INSTDEBUG        = $(INSTALLDIR)/$(DEBUGLIB)
  146. LINTLIB            = $(TM).md/llib-l$(NAME).ln
  147. INSTLINT        = $(LINTDIR).$(TM)/llib-l$(NAME).ln
  148.  
  149. #ifndef no_targets
  150. #
  151. # We should define the main targets.  See the Mkmf man page for details.
  152. #
  153.  
  154. default        : $(REGLIB)
  155.  
  156. #
  157. # Here as with MAKESUBDIRS, if an explicit TM is given then only
  158. # re-make in the subdirectories that support that target machine.
  159. #
  160. $(REGLIB)    : $(SUBDIRS)    
  161. $(SUBDIRS)    :: .MAKE .EXEC .SILENT .NOEXPORT
  162. #ifdef TM
  163.     if grep '^MACHINES' $(.TARGET)/Makefile | grep -s $(TM); then
  164.         cd $(.TARGET); $(MAKE) $(PASSVARS)
  165.     else true;
  166.     fi
  167. #else
  168.     cd $(.TARGET); $(MAKE) $(PASSVARS)
  169. #endif
  170.  
  171. $(PROFLIB)    : profile
  172. $(DEBUGLIB)    : debug
  173.  
  174. clean tidy        :: .MAKE .SILENT
  175.     echo "rm -f $(REGLIB) $(PROFLIB) $(DEBUGLIB)"
  176.     rm -f $(REGLIB) $(PROFLIB) $(DEBUGLIB)
  177.     for i in $(SUBDIRS);
  178.     do
  179. #ifdef TM
  180.         if grep '^MACHINES' $i/Makefile | grep -s $(TM); then
  181.             true;
  182.         else continue;
  183.         fi
  184. #endif TM
  185.         echo %%% ${i} %%%
  186.         (cd $i; $(MAKE) $(PASSVARS) clean)
  187.     done
  188.  
  189. #if empty(TYPE:Munknown)
  190. #
  191. # The install target is handled specially, in order to avoid multiple
  192. # passes through the subdirectories for compiling, generating lint
  193. # libraries, installing headers, and so on.
  194. #
  195. install            :: .MAKE .EXEC .NOEXPORT
  196.     $(RM) -f $(TM).md/llib-l$(NAME).ln
  197.     for i in $(SUBDIRS);
  198.     do
  199. #ifdef TM
  200.         if grep '^MACHINES' $i/Makefile | grep -s $(TM); then
  201.             true;
  202.         else continue;
  203.         fi
  204. #endif TM
  205.         echo %%% ${i} %%%
  206.         (cd $i; $(MAKE) $(PASSVARS) install)
  207.         $(CAT) ${i}/$(TM).md/llib-l${i}.ln >> $(LINTLIB)
  208.     done
  209.     $(RM) -f $(INSTLIB).old $(INSTLIB).new~
  210.     $(CP) $(REGLIB) $(INSTLIB).new~
  211.     $(RANLIB) $(INSTLIB).new~
  212.     - $(MV) $(INSTLIB) $(INSTLIB).old
  213.     $(MV) $(INSTLIB).new~ $(INSTLIB)
  214.     $(UPDATE) -m 664 $(INSTALLFLAGS) $(LINTLIB) $(INSTLINT)
  215.  
  216. #
  217. # Rebuild is like install, but it nukes the library first and starts
  218. # from scratch, telling the subdirs to append and not to ranlib.
  219. #
  220. rebuild            :: .MAKE .EXEC .NOEXPORT
  221.     $(RM) -f $(REGLIB)
  222.     for i in $(SUBDIRS);
  223.     do
  224. #ifdef TM
  225.         if grep '^MACHINES' $i/Makefile | grep -s $(TM); then
  226.             true;
  227.         else continue;
  228.         fi
  229. #endif TM
  230.         echo %%% ${i} %%%
  231.         (cd $i; $(MAKE) $(PASSVARS) rebuild)
  232.     done
  233.     ranlib $(REGLIB)
  234.  
  235. $(INSTLIB)        : $(REGLIB) MAKEINSTALLLIB
  236. installdebug        :: $(DEBUGLIB) debuglink
  237. debuglink        !
  238.     rm -f $(INSTDEBUG)
  239.     ln -s `pwd`/$(DEBUGLIB) $(INSTDEBUG)
  240. installlint        :: $(INSTLINT)
  241. $(INSTLINT)        :: $(LINTLIB) .SILENT
  242.     $(UPDATE) -m 664 $(INSTALLFLAGS) $(LINTLIB) $(INSTLINT)
  243. installman        :: .SILENT
  244. #if !empty(MANPAGES)
  245.     $(UPDATE) -m 444 -l $(INSTALLMANFLAGS) $(MANPAGES) $(INSTALLMAN)
  246. #endif
  247. installprofile        :: $(INSTPROFILE)
  248. $(INSTPROFILE)        : $(PROFLIB) MAKEINSTALLLIB
  249.  
  250. #
  251. # The following target does a quick install without cycling through to
  252. # recompile in each of the subdirectories.  Can't use the MAKEINSTALLLIB
  253. # macro for this, unfortunately.
  254. #
  255. installquick        ::
  256.     $(RM) -f $(INSTLIB).old $(INSTLIB).new~
  257.     $(CP) $(REGLIB) $(INSTLIB).new~
  258.     $(RANLIB) $(INSTLIB).new~
  259.     - $(MV) $(INSTLIB) $(INSTLIB).old
  260.     $(MV) $(INSTLIB).new~ $(INSTLIB)
  261.  
  262. #else
  263. #
  264. # The targets below are used if there's no known place to install this
  265. # library:  just output a warning message.
  266. #
  267. install installdebug installlint installman installprofile \
  268. installquick        :: .SILENT
  269.     echo "Can't install library $(NAME): no install directory defined"
  270. #endif
  271.  
  272.  
  273. lintlib            : $(LINTLIB)
  274. $(LINTLIB)        : .MAKE .EXEC .SILENT
  275.     $(RM) -f $(TM).md/llib-l$(NAME).ln
  276.     for i in $(SUBDIRS);
  277.     do
  278. #ifdef TM
  279.         if grep '^MACHINES' $i/Makefile | grep -s $(TM); then
  280.             true;
  281.         else continue;
  282.         fi
  283. #endif TM
  284.         echo %%% ${i} %%%
  285.         (cd $i; $(MAKE) $(PASSVARS) lintlib)
  286.         $(CAT) ${i}/$(TM).md/llib-l${i}.ln >> $(LINTLIB)
  287.     done
  288.  
  289. mkmf            ::
  290.     mkmf
  291.  
  292. newtm            ! .MAKE .SILENT
  293.     if $(TEST) -d $(TM).md; then
  294.         true
  295.     else
  296.         mkdir $(TM).md;
  297.         chmod 775 $(TM).md;
  298.         mkmf -m$(TM)
  299.     fi
  300.     for i in $(SUBDIRS);
  301.     do
  302.         echo %%% ${i} %%%
  303.         (cd $i; $(MAKE) $(PASSVARS) newtm)
  304.     done
  305.  
  306. rcsinfo            : .MAKE .SILENT
  307.     for i in $(SUBDIRS);
  308.     do
  309.         echo %%% ${i} %%%
  310.         (cd $i; rcsinfo)
  311.     done
  312.  
  313. debug depend installdebug         :: MAKESUBDIRS
  314. installhdrs installman installprofile    :: MAKESUBDIRS
  315. lint mkmf profile rdist            :: MAKESUBDIRS
  316.  
  317. dist: subdirs_d
  318. #if defined(DISTDIR) && !empty(DISTDIR)
  319.     if $(TEST) -e $(DISTDIR)/$(TM).md ;then
  320.         echo ""
  321.     else
  322.         mkdir $(DISTDIR)/$(TM).md
  323.     fi
  324.     for i in Makefile local.mk
  325.     do
  326.     if $(TEST) -e $${i}; then
  327.         $(UPDATE)  $${i} $(DISTDIR)/$${i} ;else true; fi
  328.     done
  329. #endif
  330.  
  331. subdirs_d:
  332. #if defined(DISTDIR) && !empty(DISTDIR)
  333.     for i in $(SUBDIRS)
  334.     do
  335.         echo %%% $${i} %%%
  336. #ifdef TM
  337.         ( cd $${i}; $(MAKE) dist 'DISTDIR=$(DISTDIR)'/$${i} 'TM=$(TM)' )
  338. #else
  339.         ( cd $${i}; $(MAKE) dist 'DISTDIR=$(DISTDIR)'/$${i} )
  340. #endif
  341.     done
  342. #if !empty(MANPAGES)
  343.     $(UPDATE)  $(MANPAGES) $(DISTDIR)/$(MANPAGES)
  344. #endif
  345. #else
  346.     @echo "Sorry, no distribution directory defined."
  347. #endif
  348.  
  349. #include <all.mk>
  350.  
  351. #endif no_targets
  352.  
  353. .MAKEFLAGS    : -C        # No compatibility needed
  354.